#pragma once

#include <functional>
#include "common_media_define.h"

namespace El {
namespace Hal {
class ICameraVideoEnc {
public:
    using PacketCallback = std::function<void(const VideoEncPacket &)>;
    virtual ~ICameraVideoEnc() = default;

    /**
     * @brief 获取ICameraVideoEnc实例
     * @param channel 通道号
     * @param stream 码流类型，MEDIA_VIDEO_ENC_STREAM
     * @return ICameraVideoEnc实例的引用
     */
    static ICameraVideoEnc &GetInstance(uint32_t channel, uint32_t stream);

    /// 开始编码。
    virtual int32_t Start(PacketCallback cb) = 0;

    /// 停止编码，
    virtual void Stop(int32_t handle) = 0;

    /// 强制编码器产生I帧。
    virtual bool ForceIFrame() = 0;

    /// 抓图
    virtual bool Snapshot() = 0;

    /// 获取编码格式
    virtual bool GetEncFormat(VideoEncFormat &enc) = 0;

    /// 设置OSD
    virtual void SetOSD(bool enable) = 0;
};

} // namespace Hal
} // namespace El
